import type { RouteRecordNormalized } from 'vue-router';
// import { appRoutes as mcRoutes } from '@mc/router/routes';

// import { DEFAULT_LAYOUT } from './base';
// import { IRoutePermission, menus } from './menus';
// import { AppRouteRecordRaw } from './types';

const modules = import.meta.glob('./modules/*.ts', { eager: true });
const externalModules = import.meta.glob('./externalModules/*.ts', {
  eager: true,
});

// 自定义菜单顺序优先级映射表
// 优先级数字越小，显示位置越靠前
// 如果文件未在映射表中，默认优先级为999（显示在最后）
const menuOrderPriority: Record<string, number> = {
  // 根据截图中的实际菜单项顺序设置优先级
  'structure.ts': 1, // 机构管理
  'device.ts': 4, // 设备管理
  'workorder.ts': 5, // 工单管理
  'reemployment.ts': 8, // 辅助管理
  'system.ts': 7, // 系统管理
  'customer.ts': 2, // 客户管理
  'service.ts': 3, // 服务管理
  'message-notice.ts': 6, // 消息通知
};

// 注意：已删除不存在的dashboard.ts文件配置

function formatModules(_modules: any, result: RouteRecordNormalized[]) {
  // 获取模块键并按自定义优先级排序
  const sortedKeys = Object.keys(_modules).sort((a, b) => {
    // 提取文件名
    const fileNameA = a.split('/').pop() || a;
    const fileNameB = b.split('/').pop() || b;

    // 获取优先级，默认为999（最低）
    const priorityA = menuOrderPriority[fileNameA] || 999;
    const priorityB = menuOrderPriority[fileNameB] || 999;

    return priorityA - priorityB;
  });

  // 按照排序后的顺序添加模块
  sortedKeys.forEach((key) => {
    const defaultModule = _modules[key].default;
    if (!defaultModule) return;
    const moduleList = Array.isArray(defaultModule)
      ? [...defaultModule]
      : [defaultModule];

    // 添加模块到结果数组
    result.push(...moduleList);
  });

  return result;
}

// const pageModules = import.meta.glob('../../views/**/*.vue');

// function loadPage(url: string): string {
//   /* @vite-ignore */
//   return `../../views/${url}.vue`;
// }

// function formatJson(data: IRoutePermission[]): AppRouteRecordRaw[] {
//   const routes: AppRouteRecordRaw[] = [];

//   data.forEach((e) => {
//     const children = e.children ? formatJson(e.children) : undefined;

//     routes.push({
//       path: e.path,
//       name: e.name,
//       component: e.location
//         ? pageModules[loadPage(e.location)]
//         : DEFAULT_LAYOUT,
//       meta: {
//         locale: e.locale,
//         requiresAuth: !!e.requiresAuth,
//         roles: e.roles,
//         icon: e.icon,
//       },
//       children,
//     });
//   });

//   return routes;
// }

// ...mcRoutes,
export const appRoutes: RouteRecordNormalized[] = formatModules(modules, []);

export const remoteRoutes = [];

export const appExternalRoutes: RouteRecordNormalized[] = formatModules(
  externalModules,
  []
);
